Hello, welcome back! 很高興再度看到你,今天我們要來談談什麼是智能合約(smart contract),智能合約可以為我們做什麼? 而 LLM 又可以如何被應用在智能合約中呢?
智能合約,簡單來說就是一段放在區塊鏈上的程式碼,當特定條件被滿足時,合約會自動執行。
而為什麼要把程式碼放到區塊鏈上呢?還記得前一篇文章 提到區塊鏈的不可篡改性嗎? 傳統 Web2 的程式碼是儲存在每個企業的伺服器中,即便程式碼開源了,還是難以保證實際執行的程式內容,是否如我們預期的,對嗎?
但如果把程式碼,放到區塊鏈上,那就成為了一份與開發者談妥的合約,這個合約完全的公開在鏈上,並且在滿足特定條件時,合約會自動執行。
Web2,也就是目前大家熟悉的網站或應用程式,程式由一個中心化的實體執行,因此資料僅由該中心化的企業或個人所擁有。中心化造成了很多問題。
例如單點故障(Single point of failure),當集中式的伺服器一旦故障,網站或應用程式就不能用了。
另外資料隱私與所有權也是一大問題,就像我們使用社群軟體,我們就授權該企業擁有我們的資料,但很難完全知道我們的資料會如何被運用,對嗎?
最後是審查的問題,中心化的網站或軟體,通常受到營運單位或政府的控制,可以隨意對內容進行審查,刪除或封鎖用戶帳號,或限制言論自由等。
有鑑於此,Web3 的概念就是去中心化,也就是將程式碼與資料,透過區塊鏈將所有權轉移到所有參與者,這就是所謂的去中心化。而實現去中心化的最主要工具,就是智能合約。
以往學習開發智能合約,例如以太坊,必須要學習特定開發語言,也就是 Solidity。並且還要學習很多分散式系統的概念,以及很多安全性上的設計原則。
但 LLM 可以在以下三個最重要的方向,協助自動生成智能合約:
只要輸入或用直接語音輸入:「我想要一個智能合約,每個月從 Alice 的賬戶自動扣除 100 USDT,並支付給 Bob,這個過程應該持續 12 個月,合約開始後不需要手動操作。」
而 LLM 自動產生以下程式碼:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract MonthlyPayment {
address public alice;
address public bob;
uint256 public amount = 100 * 10**6; // 100 USDT (USDT has 6 decimals)
uint256 public startTime;
uint256 public duration = 30 days;
uint256 public paymentsMade;
constructor(address _bob) {
alice = msg.sender;
bob = _bob;
startTime = block.timestamp;
}
function pay() public {
require(block.timestamp >= startTime + duration * paymentsMade, "Payment not due yet");
require(paymentsMade < 12, "All payments completed");
paymentsMade++;
// Transfer 100 USDT from Alice to Bob
IERC20(usdtAddress).transferFrom(alice, bob, amount);
}
}
這一段智能合約就是我將前面那一段敘述,輸入到 ChatGPT 中自動產生的。整個過程花不到一秒,是不是大幅提升了開發效率?
當然,開發者還是要學習智能合約開發知識,如此一來,才有能力調整 ChatGPT 產出的程式碼。
如前一個例子,LLM 也可以自動生成符合特定標準的智能合約類型,例如 ERC-20 或 ERC-721,讓開發者可以在給定的框架中,加入自己的商業邏輯程式碼。
開發過程中,LLM 可以協助檢查智能合約是否存在錯誤或漏洞,幫助防止潛在的安全漏洞。
軟體開發者都有過經驗,真正可怕的不是程式碼語法錯誤,而是程式碼執行正常,但是其中可能的邏輯錯誤,導致未來更大的營運損失。
舉例來說,重入攻擊(Reentrancy Attack)是一個智能合約中常見的邏輯漏洞,發生於在合約當前操作還沒完全完成之前,攻擊者多次非法呼叫同一個合約函數,導致合約中的資金被多次提領。主要的原因就是合約邏輯錯誤地允許資金在前一個操作執行完成前被重複提取。
LLM 可以學習過去已經發現的邏輯漏洞,已協助檢查合約中是否有類似的漏洞,甚至可以讓 LLM 生成針對類似重入攻擊的手法,發動新的攻擊手法。透過 LLM 作為安全對抗性的挑戰,可以協助智能合約避免未來的攻擊,這也就是 LLM 在智能合約中可以發揮的最主要功能。
當我第一次使用 LLM 產生智能合約,並用 LLM 對合約進行審計時,帶來的生產力提升讓我大為驚豔。今天我們討論了 LLM 如何生成智能合約,以及如何提高審計效率的例子。
LLM 讓我們省下大部分的開發時間,開發者們要把時間投資在持續增加自我能力中,才能與 LLM 協作良好。LLM 都在不斷進化,作為人類的我們,怎麼可以停止學習呢?
在下一篇中,我將介紹賽局理論,並且討論如何使用賽局理論並搭配 LLM,來設計智能合約中的策略與激勵機制。我們下次見!